#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <list>
#include <math.h>
#include <functional> 

#define endl '\n'
#define pii pair<int, int>
#define pdd pair<double, double> 
#define fi first
#define se second
#define pb push_back
#define eb emplace_back
#define codeforces cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(false)
#define bendl(x) x.begin(), x.end()
#define siz(x) ((int)(x).size())
#define int long long

using namespace std;

const int inf = 1 << 30;
const int mod = 998244353;
const int N = 2e5 + 10, M = N << 1;
// 10 11 
// 20 21 22
// 30 31 32 33
// 40 41 42 43 44
// 50 51 52 53 54 55

// 100 101
// 110

// 200 201 202
// 210 211 212
// 220

// 300 301 302 303
// 310 311 312 313
// 321 320 322 323
// 330

// 400 401 402 403
// 410 411 412 413
// 420 421 422 423
// 430 431 432 433
// 440

// 1000 1001
// 1010

// 2000 2001
// 2010 2011
// 2100 2101 2110 2111
// 。。。。。

int L, R, dig[N], w;

inline int p(int x, int y) {
    int z = 1;
    while (y > 0) {
        --y;
        z *= x;
    }
    return z;
}

inline int c(int n) {
    w = 0;
    while (n) dig[++w] = n % 10, n /= 10;
    int res = 0;
    for (int i = w - 1; i >= 1; i--) {
        for (int j = dig[i] - 1; j >= 0; j--) {
            if (j >= dig[w]) continue;
            res += p(dig[w], i - 1);
        }
        if (dig[i] >= dig[w]) break;
    }
    for (int i = dig[w] - 1; i > 0; i--) res += p(i, w - 1);
    for (int i = 9; i > 0; i--) {
        for (int j = w - 2; j >= 0; j--) res += p(i, j);
    }
    int tag = 1;
    for (int i = 1; i < w; i++) if(dig[i] >= dig[w]) tag = 0;
    res+=tag;
    return res;
}

void solve(){
    cin >> L >> R;
    printf("%lld\n", c(R) - c(L - 1));
}

signed main(){

    // freopen(".in", "r", stdin);
    // freopen(".out", "w", stdout);
  
    // codeforces;
    
    int t = 1; // cin >> t;
    while(t--) solve();
    return 0;
}